package com.zs.blog.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.zs.blog.model.dto.ArticleDTO;
import com.zs.blog.model.entity.Article;
import com.zs.blog.model.vo.*;

import java.util.List;

/**
 * @Title: ArticleService
 * @Author zs
 * @Package com.zs.blog.service
 * @Date 2024/10/13 20:16
 * @description: 文章服务层接口
 */
public interface IArticleService extends IService<Article> {
    /**
     * 获取分页的文章列表
     *
     * @param pageNum  页码
     * @param pageSize 每页数量
     * @return
     */
    PageInfoVO<ArticleListVO> listArticleWithPagination(Integer pageNum, Integer pageSize);

    /**
     * 发布文章
     *
     * @param articleDTO
     */
    void publish(ArticleDTO articleDTO);

    /**
     * 删除文章
     *
     * @param articleIdList
     */
    void deleteArticle(List<Long> articleIdList);

    /**
     * 修改文章状态
     *
     * @param articleId    文章ID
     * @param articleState 文章状态
     */
    void updateArticleState(Long articleId, Integer articleState);

    /**
     * 修改文章置顶状态
     *
     * @param articleId 文章ID
     * @param isTop     文章置顶状态
     */
    void updateArticleTopState(Long articleId, Integer isTop);

    /**
     * 根据文章ID获取文章数据
     *
     * @param articleId 文章ID
     * @return ArticleEditVO
     */
    ArticleEditVO getArticleByArticleId(Long articleId);

    /**
     * 随机获取文章
     *
     * @return
     */
    List<ArticleRandomVO> listRandomArticle();

    /**
     * 根据文章ID获取文章详情
     *
     * @param articleId 文章ID
     * @return
     */
    ArticleDetailVO getArticleDetailByArticleId(Long articleId);

    /**
     * 获取推荐文章
     *
     * @return
     */
    List<ArticleRecommendVO> getRecommendArticle();

    /**
     * 获取相关文章
     *
     * @param articleId  文章ID
     * @param categoryId 分类ID
     * @return
     */
    List<ArticleRelatedVO> getRelatedArticle(Long articleId, Long categoryId);

    /**
     * 获取文章时间轴
     *
     * @return
     */
    List<ArticleTimelineVO> listArticleTimeline();
}
